//
//  DYWWeiBoImageView.swift
//  sinaWeibo
//
//  Created by 董艳武 on 16/2/22.
//  Copyright © 2016年 董艳武. All rights reserved.
//

import UIKit
import SnapKit
import SDWebImage
class DYWWeiBoImageView: UICollectionView {
    
    let w = ( UIScreen.mainScreen().bounds.width - 4 * commonMargin - 2 * imgsMargin ) / 3
    let cellID = "imgs"
    
    // 图片 url 属性 
    var imgUrls:[NSURL]? {
        didSet {
            let pSize = self.calculateSize()
            self.snp_updateConstraints { (make) -> Void in
                make.size.equalTo(pSize)
            }
            reloadData()
        }
    }
    
    // 重写重载方法
    override init(frame: CGRect, collectionViewLayout layout: UICollectionViewLayout) {
        let flowLayout = UICollectionViewFlowLayout()
        super.init(frame: CGRectZero, collectionViewLayout: flowLayout)
        self.dataSource = self
        self.registerClass(DYWImageCell.self, forCellWithReuseIdentifier: cellID)
        flowLayout.minimumInteritemSpacing = imgsMargin
        flowLayout.minimumLineSpacing = imgsMargin
        flowLayout.itemSize = CGSizeMake(w , w )
        self.backgroundColor = UIColor.clearColor()
        
        // 关闭点击状态栏回到顶部
        self.scrollsToTop = false
        
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        setUI()
    }
    
    private func setUI () {
            }
    
    private func calculateSize() -> CGSize {
        
        if imgUrls?.count == 0 {
            return CGSizeZero
        }
        
        let flowLayOut = self.collectionViewLayout as! UICollectionViewFlowLayout
        
        if imgUrls?.count == 1 {
            // 当只显示一张图片的时候
            flowLayOut.itemSize = CGSizeMake(150, 225)
            
            return CGSizeMake(150, 225)
        }
        
        flowLayOut.itemSize = CGSizeMake(w, w)
        
        if imgUrls?.count == 4 {
            return CGSizeMake(2 * w + imgsMargin, 2 * w + imgsMargin)
        }
        if let imgCount = imgUrls?.count {
            
            let col = CGFloat( (imgCount - 1) / 3 + 1)
            
            /*
            注意：此处先将1 和 4 两种情况考虑在内 （） 表示开始换行
            逻辑 ：   （1） 2、3 张图片 显示 一行
                     （4） 5、6 张图片 显示 两行 加 一个 间距
                     （7） 8、9 张图片 显示 三行 加 两个 间距
            参数count  行数 count / 3 列数 count % 3
            imgCount - 1 是为了让显示第3，6，9张图片的时候不换行
            + 1 是 因为默认显示的就是一行，从第4行开始换行并且额外增加一个图片间距的高度
            col - 1 是 因为 在一行显示时，高度不用加一个图片间距
            */
            
            return CGSizeMake(3 * w + 2 * imgsMargin , col * w + (col - 1) * imgsMargin )

        }
        return CGSizeZero
    }
}
// MARK:--数据源方法
extension DYWWeiBoImageView: UICollectionViewDataSource {
    
    
    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return imgUrls?.count ?? 0
    }
    
    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier(cellID, forIndexPath: indexPath) as! DYWImageCell
        cell.imgUrl = imgUrls![indexPath.row]
        return cell
    }
    
}
private class DYWImageCell:UICollectionViewCell {
    
    var imgUrl:NSURL? {
        didSet {
            imgView.sd_setImageWithURL(imgUrl)
        }
    }
    
    lazy var imgView: UIImageView = {
        
        let imgV = UIImageView()
        imgV.contentMode = .ScaleAspectFill
        // 手动裁剪适应大小
        imgV.clipsToBounds = true
        return imgV
    }()
    
    override init(frame: CGRect) {
        super.init(frame: frame)
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        addSubview(imgView)
        imgView.snp_makeConstraints { (make) -> Void in
            /*
            两个效果是一样的
            */
//            make.edges.equalTo(contentView.snp_edges)
            make.size.equalTo(self.snp_size)
        }
    }
}

